package Exception;

/**
 * java异常处理机制
 * try-catch
 *
 * 明知会出错，但是我们无法通过逻辑去避免的问题
 *
 * 语法：
 * try{
 *     A
 * }catch(XXXXException){
 *     针对A计划中出现的XXXXException后的补救措施（B计划）
 * }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
            //String line = "a";
            String line = "abc";
            //当JVM执行程序出现某个异常时就会实例化对应的异常实例，并将其抛出
            //如果这句报错的代码没有异常处理机制，则该异常会被抛出到当前方法之外（这里相当于是main方法之外)
            //如果有异常处理机制(catch块)，则进入对应的catch块内处理该异常
            System.out.println(line.length());
            System.out.println(line.charAt(1));
            System.out.println(Integer.parseInt(line));
        //}catch(NullPointerException e){
        //    System.out.println("出现空指针，并解决了！");
        //}catch(StringIndexOutOfBoundsException e){//catch可以定义多个针对不同异常分别捕获
        //    System.out.println("出现下边越界，并解决了");
            // 如果多个异常的处理办法相同，可以合并到一个catch里，这里的或只用|
        }catch(NullPointerException|StringIndexOutOfBoundsException e){
            System.out.println("出现可空指针或下标越界，并解决了");
        }catch(Exception e){//所有的异常的超类就是Exception，这都能捕获
            System.out.println("反正是报了个错");
        }
        System.out.println("程序结束了");
    }
}
